<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        //借用函数
        // var bird = {
        //     name: "鸟",
        //     fly: function () {
        //         console.log(this.name + "会飞")
        //     }
        // }
        // var pig = {
        //     name: "🐖🐖🐖🐖🐖🐖🐖🐖🐖"
        // }
        // bird.fly.call(pig)
        // var fly = bird.fly.bind(pig)
        // fly()




        // //借用数组中的join
        // function test() {
        //     console.log(Array.prototype.join.call(arguments, '$'))
        // }
        // test(1, 2, 3, 4)



        // var User = function (nickname, password) {
        //     this.nickname = nickname
        //     this.password = password
        // }

        // var Pet = function (gender, nickname, owner) {
        //     this.gender = gender
        //     this.nickname = nickname
        //     this.owner = owner
        //     this.state = 80
        //     this.introduceSelf = function () {
        //         console.log(`
        //         大家好，我叫${this.nickname},
        //         我是个${this.gender === 1 ? "男" : "女"}生，
        //         主人叫${this.owner},
        //         当前状态值是${this.state}
        //         `)
        //     }

        // }



        // var game = {
        //     loginUser: "",
        //     //用户列表
        //     UserList: [],
        //     petList: [],
        //     //注册方法
        //     register: function (n, p) {
        //         //检查昵称是否已存在
        //         var isAlive = false
        //         for (let i = 0; i < this.UserList.length; i++) {
        //             var user = this.UserList[i]
        //             if (user.nickname === n) {
        //                 isAlive = true
        //             }
        //         }
        //         if (isAlive) {
        //             return false
        //         }
        //         var user = new User(n, p)
        //         this.UserList.push(user)
        //         return true
        //     },

        //     //登录方法
        //     login(n, p) {
        //         for (let i = 0; i < this.UserList.length; i++) {
        //             var user = this.UserList[i]
        //             if (user.nickname === n && user.password === p) {
        //                 return true
        //             }
        //         }
        //         return false
        //     },


        //     init() {
        //         this.register("fdg", "321")
        //         this.register("rds", "321")
        //     },


        //     showBuyPetPage() {
        //         do {
        //             var gender = prompt("1.GG 2.MM")
        //         } while (gender !== "1" && gender !== "2")

        //         do {
        //             var nickname = prompt("请输入宠物昵称")
        //         } while (nickname.trim().length === 0)

        //         var pet = new Pet(parseInt(gender), nickname, this.loginUser)
        //         this.petList.push(pet)
        //         console.log("领养成功")
        //         this.showMainPage()
        //     },

        //     showMyPetPage() {

        //         for (let i = 0; i < this.petList.length; i++) {
        //             if (this.petList[i].owner === this.loginUser) {
        //                 this.petList[i].introduceSelf()

        //             }
        //         }

        //         this.showWelcomePage()
        //     },
        //     showMainPage() {
        //         var result = prompt("1.领养宠物  2.我的宠物  3.退出")
        //         switch (result) {
        //             case "1":
        //                 this.showBuyPetPage()
        //                 break;
        //             case "2":
        //                 this.showMyPetPage()
        //                 break;
        //             case "3":
        //                 this.close()
        //                 break;
        //             default:
        //                 console.log("输入有误，请重新输入")
        //                 arguments.callee.call(this)
        //                 break;
        //         }


        //     },
        //     showRegisterPage() {
        //         console.log("进入注册界面")
        //         do {
        //             var nickname = prompt("请输入您的昵称")
        //         } while (nickname.trim().length === 0)
        //         do {
        //             var password = prompt("请输入您的密码")
        //         } while (password.trim().length === 0)
        //         do {
        //             var passwordConf = prompt("请确认您的密码")
        //         } while (passwordConf !== password)

        //         if (this.register(nickname, password)) {
        //             console.log("注册成功")
        //             this.showWelcomePage()
        //         } else {
        //             console.log("注册失败，昵称重复")
        //             this.showRegisterPage()
        //         }
        //     },
        //     showLoginPage() {
        //         console.log("========进入登陆界面=========")
        //         do {
        //             var nickname = prompt("请输入您的昵称")
        //         } while (nickname.trim().length === 0)
        //         do {
        //             var password = prompt("请输入您的密码")
        //         } while (password.trim().length < 6)

        //         if (this.login(nickname, password)) {
        //             console.log("登录成功")
        //             this.loginUser = nickname
        //             this.showMainPage()
        //         } else {
        //             console.log("登录失败")
        //             this.showLoginPage()
        //         }

        //     },
        //     showWelcomePage() {
        //         var result = prompt("1.注册  2.登录  3.退出")
        //         switch (result) {
        //             case "1":
        //                 this.showRegisterPage()
        //                 break;
        //             case "2":
        //                 this.showLoginPage()
        //                 break;
        //             case "3":
        //                 this.close()
        //                 break;
        //             default:
        //                 console.log("输入有误，请重新输入")
        //                 arguments.callee.call(this)
        //                 break;
        //         }
        //     },
        //     start() {
        //         console.log("游戏开始")
        //         this.init()
        //         this.showWelcomePage()
        //     },
        //     close() {
        //         if (confirm) {
        //             alert("确定退出吗")
        //         }
        //         console.log("游戏已退出")
        //     },
        //     getUserList() {
        //         for (let i = 0; i < this.UserList.length; i++) {
        //             console.log(this.UserList[i])
        //         }
        //     }


        // }
        // game.start()
        // // // game.getUserList()




        var User = function (nickname, password) {
            this.nickname = nickname
            this.password = password
        }

        var Pet = function (gender, nickname, owner) {
            this.gender = gender
            this.nickname = nickname
            this.owner = owner
            this.state = 80
            this.lastEatTime = null
            this.introduceSelf = function () {
                console.log(`
                大家好，我叫${this.nickname},
                我是个${this.gender === 1 ? "男" : "女"}生，
                主人叫${this.owner},
                当前状态值是${this.state}
                `)
            }
        }

        var game = { //建立游戏对象
            loginUser: "",//登录用户名用来
            //用户列表
            userList: [],//用户列表数组
            // //过滤敏感词
            // filterSensitiveWords(str) {
            //     var wordList = ["毒", "政府", "日本"]
            //     for (let i = 0; i < wordList.length; i++) {
            //         if (str.indexOf(wordList[i]) > -1) {
            //             return str.replace(wordList[i], "*")
            //         }
            //     }
            // },
            //检测是否包含敏感词
            hasSensitiveWords(str) {                                       // 定义是否包含敏感词汇方法
                var wordList = ["毒", "政府", "日本"]                       // 定义关键字数组
                for (let i = 0; i < wordList.length; i++) {                //循环
                    if (str.indexOf(wordList[i]) > -1) {                   //通过数组下标判断
                        return true                                        //返回
                    }
                }
            },
            petList: [                                                     //建立宠物列表对象
                new Pet(1, "chaochao", "Ace")  //给宠物变量
            ],
            //注册方法
            register(nickname, pwd) {//注册给两个账号密码的形参
                //检测昵称是否存在
                var isAlive = false
                for (let i = 0; i < this.userList.length; i++) {//循环用户数组
                    var user = this.userList[i]//将i作为下标给用户数组，赋值给新的用户
                    if (user.nickname === nickname) {//判断昵称是否一致
                        isAlive = true       //结果为真
                    }
                }

                if (isAlive) return false  // 结果为否

                var user = new User(nickname, pwd)//将昵称和密码作为参数给新的用户
                this.userList.push(user) //将用户添加进新的用户数组
                return true                 //返回true
            },
            login(nickname, pwd) {//登录方法
                for (let i = 0; i < this.userList.length; i++) { //循环已经注册的用户列表
                    var user = this.userList[i]//将i作为下表赋值给新的用户
                    if (user.nickname === nickname && user.password === pwd) {//判断昵称和用户名是否一致
                        return true//返回结果为真
                    }
                }

                return false //返回结果为假
            },
            init() {  //初始化游戏
                this.register("Simba", "123456")//调用注册方法给游戏初始值
                this.register("Ace", "123456")
            },
            showBuyPetPage() {//领养宠物方法
                var mypet = this.getMyPet()//调用getMyPet()方法给新的宠物对象
                if (mypet) {//判断是否已经有宠物
                    console.log("你已经有宠物了！")
                } else {//如果没有宠物则则执行以下代码
                    do {
                        var gender = prompt("1.GG  2.MM")   //给一个输入弹框来选择要领养的宠物性别
                    } while (gender !== "1" && gender !== "2")//如果不选1或2则一直执行弹框

                    do {
                        var nickname = prompt("请输入宠物昵称") //给一个输入弹框来注册宠物的昵称
                    } while (nickname.trim().length === 0)//判断宠物昵称是否为空值

                    while (this.hasSensitiveWords(nickname)) { //判断宠物昵称是否含有敏感词汇
                        nickname = prompt("宠物的昵称有敏感词，请重新输入")//给一个输入弹框来提示"宠物的昵称有敏感词，请重新输入"
                    }

                    var pet = new Pet(parseInt(gender), nickname, this.loginUser)//将宠物的三个属性作为参数给新的宠物对象
                    this.petList.push(pet)//将新的宠物添加进宠物数组
                    console.log("领养成功")//输出结果
                }

                this.showMainPage()//调用showMainPage()界面
            },
            getMyPet() {//获取我的宠物方法
                for (let i = 0; i < this.petList.length; i++) {//循环已经添加的宠物列表
                    if (this.petList[i].owner === this.loginUser) {//判断宠物的主人是否和登录的用户名相等
                        return this.petList[i]//如果相等则返回这只宠物
                    }
                }

                return null // 否则返回空值
            },
            showMyPetPage() {//获取我的宠物界面

                var mypet = this.getMyPet() //调用获得的宠物方法赋值给当前我的宠物对象

                if (!mypet) { //如果不满足以上方法
                    console.log("你还没有宠物！")//输出结果
                    this.showMainPage()//调用showMainPage()界面你
                } else {//如果满足
                    mypet.introduceSelf()//让宠物做自我介绍
                    this.showPlayWithPetPage(mypet)//调用逗宠物方法将当前宠物对象给方法
                }

            },
            feedPet(mypet) { //给宠物喂食方法
                var now = new Date()//给定当前时间对象
                if (now - mypet.lastEatTime < 5 * 1000) {//判断宠物喂食时间是否小于一分钟
                    console.log('您喂食太快了')//输出结果
                } else {//如果宠物喂食时间小于一分钟喂食成功，宠物状态加10，刷新当前时间
                    mypet.state += 10
                    mypet.lastEatTime = now
                    mypet.introduceSelf()//调用introduceSelf()界面
                }
                this.showPlayWithPetPage(mypet)//将当前宠物对象赋值给showPlayWithPetPage（）方法
            },
            takeCarePet(mypet) {//逗宠物方法
                mypet.state += 20 //宠物状态加10
                mypet.introduceSelf()//调用宠物自我介绍方法做自我介绍
                this.showPlayWithPetPage(mypet)//将当前宠物对象赋值给showPlayWithPetPage（）方法
            },
            showPlayWithPetPage(mypet) {//定义和宠物玩方法
                var result = prompt("1.给宠物喂食   2.逗宠物开心   3.回到主菜单")//给一个输入弹框来选择要给宠物做的事
                switch (result) {//选择循环
                    case "1"://如果选择1，调用feedPet()方法
                        this.feedPet(mypet)//将宠物参数给喂食方法
                        break;//跳出这一条循环
                    case "2"://如果选择1，调用takeCarePet()方法
                        this.takeCarePet(mypet)//将宠物参数给逗宠物开心方法
                        break;//跳出这一条循环
                    case "3"://如果选择3，调用showMainPage()方法
                        this.showMainPage()//调用宠物主界面
                        break;//跳出这一条循环
                    default://如果都不满足
                        console.log("输入有误，请重新输入")//输出结果
                        arguments.callee.call(this, mypet)//调用递归方法，循环自己（  showPlayWithPetPage(mypet)）
                        break;//跳出这一条循环
                }
            },
            showMainPage() {//定义和宠物主界面方法
                var result = prompt("1.领养宠物  2.我的宠物   3.退出")//给一个输入弹框来选择要给宠物做的事
                switch (result) {//选择循环
                    case "1"://如果选择1，调用showBuyPetPage()方法
                        this.showBuyPetPage()//调用领养宠物界面
                        break;//跳出这一条循环
                    case "2"://如果选择2，调用showMyPetPage()方法
                        this.showMyPetPage()//调用展示我的宠物界面
                        break;//跳出这一条循环
                    case "3"://如果选择3，调用close()方法
                        this.close()//关闭窗口
                        break;//跳出循环
                    default://如果都不满足
                        console.log("输入有误，请重新输入")//输出结果
                        arguments.callee.call(this)//调用递归方法，循环自己（ showMainPage() ）
                        break;//跳出循环
                }

            },
            showRegisterPage() {//定义宠物主界面方法
                console.log("=========进入注册页面=========")
                do {
                    var nickname = prompt("请输入您的昵称")//给一个输入弹框来输入注册昵称
                } while (nickname.trim().length === 0)//当输入的昵称为空值则一直循环

                while (this.hasSensitiveWords(nickname)) {//将当前昵称作为参数给hasSensitiveWords()方法进行判断
                    nickname = prompt("您的昵称有敏感词，请重新输入")
                }

                do {
                    var password = prompt("请输入您的密码")//给一个输入弹框来输入注册密码
                } while (password.trim().length < 6)//如果密码的长度值小于6则一直循环

                do {
                    var passwordConfirm = prompt("请再次输入密码")//给一个输入弹框来再次确认密码
                } while (password !== passwordConfirm)//判断第一次的密码和第二次的密码是否一致

                if (this.register(nickname, password)) {//将昵称和密码作为参数给注册方法
                    console.log("注册成功")//如果满足注册条件则注册成功
                    this.showWelcomePage()//调用showWelcomePage()方法
                } else {//否则注册失败
                    console.log("注册失败，昵称重复")
                    this.showRegisterPage()//调用showRegisterPage()
                }


                // game.getUserList()
            },
            showLoginPage() {
                console.log("=========进入登录页面=========")
                do {
                    var nickname = prompt("请输入您的昵称")//给一个输入弹框来输入登录昵称
                } while (nickname.trim().length === 0)//当输入的昵称为空值则一直循环

                do {
                    var password = prompt("请输入您的密码")//给一个输入弹框来输入登录密码
                } while (password.trim().length < 6)//如果密码的长度值小于6则一直循环

                if (this.login(nickname, password)) {//将昵称和密码作为参数给登录方法
                    console.log("登录成功")//如果满足登录条件则登录成功
                    this.loginUser = nickname //登录的昵称赋值给登录用户名
                    this.showMainPage()//调用showMainPage()
                } else {//如果不满足则登录失败
                    console.log("登录失败")
                    this.showLoginPage()//调用showLoginPage()方法
                }
            },
            showWelcomePage() {//定义用户主界面方法
                var result = prompt("1.注册  2.登录 3.退出")//给一个输入弹框来让用户选择
                switch (result) {//选择循环
                    case "1"://如果选择1，调用showRegisterPage()方法
                        this.showRegisterPage()//调用用户注册界面
                        break;//跳出这一条循环
                    case "2"://如果选择2，调用showLoginPage()方法
                        this.showLoginPage()////调用用户登录界面
                        break;//跳出这一条循环
                    case "3"://如果选择3，调用close()方法
                        this.close()//关闭窗口
                        break;//跳出循环
                    default://如果都不满足
                        console.log("输入有误，请重新输入")//输出结果"输入有误，请重新输入"
                        arguments.callee.call(this)//调用递归方法，循环自己（ showWelcomePage()  ）
                        break;
                }
            },
            start() {//游戏开始方法
                console.log("游戏开始")//输出结果"游戏开始"
                this.init()//调用游戏初始化方法
                //用户操作
                this.showWelcomePage()//调用欢迎界面方法
            },
            close() {//关闭游戏方法
                if (confirm("确定退出吗")) {//弹出新的弹框让用户确认是否退出
                    console.log("游戏已退出")//点击“确认”，游戏退出
                } else {//否则调用showWelcomePage()方法
                    this.showWelcomePage()
                }
            },
            getUserList() {//获取注册完成的用户列表
                for (let i = 0; i < this.userList.length; i++) {//循环用户列表
                    console.log(this.userList[i])//输出用户
                }
            }
        }

        game.start()//游戏启动






        var game = { //建立游戏对象
            loginUser: "",//登录用户名用来
            //用户列表
            userList: [],//用户列表数组
            // //过滤敏感词
            // filterSensitiveWords(str) {
            //     var wordList = ["毒", "政府", "日本"]
            //     for (let i = 0; i < wordList.length; i++) {
            //         if (str.indexOf(wordList[i]) > -1) {
            //             return str.replace(wordList[i], "*")
            //         }
            //     }
            // },
            //检测是否包含敏感词
            hasSensitiveWords(str) {                                       // 定义是否包含敏感词汇方法
                var wordList = ["毒", "政府", "日本"]                       // 定义关键字数组
                for (let i = 0; i < wordList.length; i++) {                //循环
                    if (str.indexOf(wordList[i]) > -1) {                   //通过数组下标判断
                        return true                                        //返回
                    }
                }
            },
            petList: [                                                     //建立宠物列表对象
                new Pet(1, "chaochao", "Ace")  //给宠物变量
            ],
            //注册方法
            register(nickname, pwd) {//注册给两个账号密码的形参
                //检测昵称是否存在
                var isAlive = false
                for (let i = 0; i < this.userList.length; i++) {//循环用户数组
                    var user = this.userList[i]//将i作为下标给用户数组，赋值给新的用户
                    if (user.nickname === nickname) {//判断昵称是否一致
                        isAlive = true       //结果为真
                    }
                }

                if (isAlive) return false  // 结果为否

                var user = new User(nickname, pwd)//将昵称和密码作为参数给新的用户
                this.userList.push(user) //将用户添加进新的用户数组
                return true                 //返回true
            },
            login(nickname, pwd) {//登录方法
                for (let i = 0; i < this.userList.length; i++) { //循环已经注册的用户列表
                    var user = this.userList[i]//将i作为下表赋值给新的用户
                    if (user.nickname === nickname && user.password === pwd) {//判断昵称和用户名是否一致
                        return true//返回结果为真
                    }
                }

                return false //返回结果为假
            },
            init() {  //初始化游戏
                this.register("Simba", "123456")//调用注册方法给游戏初始值
                this.register("Ace", "123456")
            },
            showBuyPetPage() {//领养宠物方法
                var mypet = this.getMyPet()//调用getMyPet()方法给新的宠物对象
                if (mypet) {//判断是否已经有宠物
                    console.log("你已经有宠物了！")
                } else {//如果没有宠物则则执行以下代码
                    do {
                        var gender = prompt("1.GG  2.MM")   //给一个输入弹框来选择要领养的宠物性别
                    } while (gender !== "1" && gender !== "2")//如果不选1或2则一直执行弹框

                    do {
                        var nickname = prompt("请输入宠物昵称") //给一个输入弹框来注册宠物的昵称
                    } while (nickname.trim().length === 0)//判断宠物昵称是否为空值

                    while (this.hasSensitiveWords(nickname)) { //判断宠物昵称是否含有敏感词汇
                        nickname = prompt("宠物的昵称有敏感词，请重新输入")//给一个输入弹框来提示"宠物的昵称有敏感词，请重新输入"
                    }

                    var pet = new Pet(parseInt(gender), nickname, this.loginUser)//将宠物的三个属性作为参数给新的宠物对象
                    this.petList.push(pet)//将新的宠物添加进宠物数组
                    console.log("领养成功")//输出结果
                }

                this.showMainPage()//调用showMainPage()界面
            },
            getMyPet() {//获取我的宠物方法
                for (let i = 0; i < this.petList.length; i++) {//循环已经添加的宠物列表
                    if (this.petList[i].owner === this.loginUser) {//判断宠物的主人是否和登录的用户名相等
                        return this.petList[i]//如果相等则返回这只宠物
                    }
                }

                return null // 否则返回空值
            },
            showMyPetPage() {//获取我的宠物界面

                var mypet = this.getMyPet() //调用获得的宠物方法赋值给当前我的宠物对象

                if (!mypet) { //如果不满足以上方法
                    console.log("你还没有宠物！")//输出结果
                    this.showMainPage()//调用showMainPage()界面你
                } else {//如果满足
                    mypet.introduceSelf()//让宠物做自我介绍
                    this.showPlayWithPetPage(mypet)//调用逗宠物方法将当前宠物对象给方法
                }

            },
            feedPet(mypet) { //给宠物喂食方法
                var now = new Date()//给定当前时间对象
                if (now - mypet.lastEatTime < 5 * 1000) {//判断宠物喂食时间是否小于一分钟
                    console.log('您喂食太快了')//输出结果
                } else {//如果宠物喂食时间小于一分钟喂食成功，宠物状态加10，刷新当前时间
                    mypet.state += 10
                    mypet.lastEatTime = now
                    mypet.introduceSelf()//调用introduceSelf()界面
                }
                this.showPlayWithPetPage(mypet)//将当前宠物对象赋值给showPlayWithPetPage（）方法
            },
            takeCarePet(mypet) {//逗宠物方法
                mypet.state += 20 //宠物状态加10
                mypet.introduceSelf()//调用宠物自我介绍方法做自我介绍
                this.showPlayWithPetPage(mypet)//将当前宠物对象赋值给showPlayWithPetPage（）方法
            },
            showPlayWithPetPage(mypet) {//定义和宠物玩方法
                var result = prompt("1.给宠物喂食   2.逗宠物开心   3.回到主菜单")//给一个输入弹框来选择要给宠物做的事
                switch (result) {//选择循环
                    case "1"://如果选择1，调用feedPet()方法
                        this.feedPet(mypet)//将宠物参数给喂食方法
                        break;//跳出这一条循环
                    case "2"://如果选择1，调用takeCarePet()方法
                        this.takeCarePet(mypet)//将宠物参数给逗宠物开心方法
                        break;//跳出这一条循环
                    case "3"://如果选择3，调用showMainPage()方法
                        this.showMainPage()//调用宠物主界面
                        break;//跳出这一条循环
                    default://如果都不满足
                        console.log("输入有误，请重新输入")//输出结果
                        arguments.callee.call(this, mypet)//调用递归方法，循环自己（  showPlayWithPetPage(mypet)）
                        break;//跳出这一条循环
                }
            },
            showMainPage() {//定义和宠物主界面方法
                var result = prompt("1.领养宠物  2.我的宠物   3.退出")//给一个输入弹框来选择要给宠物做的事
                switch (result) {//选择循环
                    case "1"://如果选择1，调用showBuyPetPage()方法
                        this.showBuyPetPage()//调用领养宠物界面
                        break;//跳出这一条循环
                    case "2"://如果选择2，调用showMyPetPage()方法
                        this.showMyPetPage()//调用展示我的宠物界面
                        break;//跳出这一条循环
                    case "3"://如果选择3，调用close()方法
                        this.close()//关闭窗口
                        break;//跳出循环
                    default://如果都不满足
                        console.log("输入有误，请重新输入")//输出结果
                        arguments.callee.call(this)//调用递归方法，循环自己（ showMainPage() ）
                        break;//跳出循环
                }

            },
            showRegisterPage() {//定义宠物主界面方法
                console.log("=========进入注册页面=========")
                do {
                    var nickname = prompt("请输入您的昵称")//给一个输入弹框来输入注册昵称
                } while (nickname.trim().length === 0)//当输入的昵称为空值则一直循环

                while (this.hasSensitiveWords(nickname)) {//将当前昵称作为参数给hasSensitiveWords()方法进行判断
                    nickname = prompt("您的昵称有敏感词，请重新输入")
                }

                do {
                    var password = prompt("请输入您的密码")//给一个输入弹框来输入注册密码
                } while (password.trim().length < 6)//如果密码的长度值小于6则一直循环

                do {
                    var passwordConfirm = prompt("请再次输入密码")//给一个输入弹框来再次确认密码
                } while (password !== passwordConfirm)//判断第一次的密码和第二次的密码是否一致

                if (this.register(nickname, password)) {//将昵称和密码作为参数给注册方法
                    console.log("注册成功")//如果满足注册条件则注册成功
                    this.showWelcomePage()//调用showWelcomePage()方法
                } else {//否则注册失败
                    console.log("注册失败，昵称重复")
                    this.showRegisterPage()//调用showRegisterPage()
                }


                // game.getUserList()
            },
            showLoginPage() {
                console.log("=========进入登录页面=========")
                do {
                    var nickname = prompt("请输入您的昵称")//给一个输入弹框来输入登录昵称
                } while (nickname.trim().length === 0)//当输入的昵称为空值则一直循环

                do {
                    var password = prompt("请输入您的密码")//给一个输入弹框来输入登录密码
                } while (password.trim().length < 6)//如果密码的长度值小于6则一直循环

                if (this.login(nickname, password)) {//将昵称和密码作为参数给登录方法
                    console.log("登录成功")//如果满足登录条件则登录成功
                    this.loginUser = nickname //登录的昵称赋值给登录用户名
                    this.showMainPage()//调用showMainPage()
                } else {//如果不满足则登录失败
                    console.log("登录失败")
                    this.showLoginPage()//调用showLoginPage()方法
                }
            },
            showWelcomePage() {//定义用户主界面方法
                var result = prompt("1.注册  2.登录 3.退出")//给一个输入弹框来让用户选择
                switch (result) {//选择循环
                    case "1"://如果选择1，调用showRegisterPage()方法
                        this.showRegisterPage()//调用用户注册界面
                        break;//跳出这一条循环
                    case "2"://如果选择2，调用showLoginPage()方法
                        this.showLoginPage()////调用用户登录界面
                        break;//跳出这一条循环
                    case "3"://如果选择3，调用close()方法
                        this.close()//关闭窗口
                        break;//跳出循环
                    default://如果都不满足
                        console.log("输入有误，请重新输入")//输出结果"输入有误，请重新输入"
                        arguments.callee.call(this)//调用递归方法，循环自己（ showWelcomePage()  ）
                        break;
                }
            },
            start() {//游戏开始方法
                console.log("游戏开始")//输出结果"游戏开始"
                this.init()//调用游戏初始化方法
                //用户操作
                this.showWelcomePage()//调用欢迎界面方法
            },
            close() {//关闭游戏方法
                if (confirm("确定退出吗")) {//弹出新的弹框让用户确认是否退出
                    console.log("游戏已退出")//点击“确认”，游戏退出
                } else {//否则调用showWelcomePage()方法
                    this.showWelcomePage()
                }
            },
            getUserList() {//获取注册完成的用户列表
                for (let i = 0; i < this.userList.length; i++) {//循环用户列表
                    console.log(this.userList[i])//输出用户
                }
            }
        }

        game.start()//游戏启动




        var game = { //建立游戏对象
            loginUser: "",//登录用户名用来
            //用户列表
            userList: [],//用户列表数组
            // //过滤敏感词
            // filterSensitiveWords(str) {
            //     var wordList = ["毒", "政府", "日本"]
            //     for (let i = 0; i < wordList.length; i++) {
            //         if (str.indexOf(wordList[i]) > -1) {
            //             return str.replace(wordList[i], "*")
            //         }
            //     }
            // },
            //检测是否包含敏感词
            hasSensitiveWords(str) {                                       // 定义是否包含敏感词汇方法
                var wordList = ["毒", "政府", "日本"]                       // 定义关键字数组
                for (let i = 0; i < wordList.length; i++) {                //循环
                    if (str.indexOf(wordList[i]) > -1) {                   //通过数组下标判断
                        return true                                        //返回
                    }
                }
            },
            petList: [                                                     //建立宠物列表对象
                new Pet(1, "chaochao", "Ace")  //给宠物变量
            ],
            //注册方法
            register(nickname, pwd) {//注册给两个账号密码的形参
                //检测昵称是否存在
                var isAlive = false
                for (let i = 0; i < this.userList.length; i++) {//循环用户数组
                    var user = this.userList[i]//将i作为下标给用户数组，赋值给新的用户
                    if (user.nickname === nickname) {//判断昵称是否一致
                        isAlive = true       //结果为真
                    }
                }

                if (isAlive) return false  // 结果为否

                var user = new User(nickname, pwd)//将昵称和密码作为参数给新的用户
                this.userList.push(user) //将用户添加进新的用户数组
                return true                 //返回true
            },
            login(nickname, pwd) {//登录方法
                for (let i = 0; i < this.userList.length; i++) { //循环已经注册的用户列表
                    var user = this.userList[i]//将i作为下表赋值给新的用户
                    if (user.nickname === nickname && user.password === pwd) {//判断昵称和用户名是否一致
                        return true//返回结果为真
                    }
                }

                return false //返回结果为假
            },
            init() {  //初始化游戏
                this.register("Simba", "123456")//调用注册方法给游戏初始值
                this.register("Ace", "123456")
            },
            showBuyPetPage() {//领养宠物方法
                var mypet = this.getMyPet()//调用getMyPet()方法给新的宠物对象
                if (mypet) {//判断是否已经有宠物
                    console.log("你已经有宠物了！")
                } else {//如果没有宠物则则执行以下代码
                    do {
                        var gender = prompt("1.GG  2.MM")   //给一个输入弹框来选择要领养的宠物性别
                    } while (gender !== "1" && gender !== "2")//如果不选1或2则一直执行弹框

                    do {
                        var nickname = prompt("请输入宠物昵称") //给一个输入弹框来注册宠物的昵称
                    } while (nickname.trim().length === 0)//判断宠物昵称是否为空值

                    while (this.hasSensitiveWords(nickname)) { //判断宠物昵称是否含有敏感词汇
                        nickname = prompt("宠物的昵称有敏感词，请重新输入")//给一个输入弹框来提示"宠物的昵称有敏感词，请重新输入"
                    }

                    var pet = new Pet(parseInt(gender), nickname, this.loginUser)//将宠物的三个属性作为参数给新的宠物对象
                    this.petList.push(pet)//将新的宠物添加进宠物数组
                    console.log("领养成功")//输出结果
                }

                this.showMainPage()//调用showMainPage()界面
            },
            getMyPet() {//获取我的宠物方法
                for (let i = 0; i < this.petList.length; i++) {//循环已经添加的宠物列表
                    if (this.petList[i].owner === this.loginUser) {//判断宠物的主人是否和登录的用户名相等
                        return this.petList[i]//如果相等则返回这只宠物
                    }
                }

                return null // 否则返回空值
            },
            showMyPetPage() {//获取我的宠物界面

                var mypet = this.getMyPet() //调用获得的宠物方法赋值给当前我的宠物对象

                if (!mypet) { //如果不满足以上方法
                    console.log("你还没有宠物！")//输出结果
                    this.showMainPage()//调用showMainPage()界面你
                } else {//如果满足
                    mypet.introduceSelf()//让宠物做自我介绍
                    this.showPlayWithPetPage(mypet)//调用逗宠物方法将当前宠物对象给方法
                }

            },
            feedPet(mypet) { //给宠物喂食方法
                var now = new Date()//给定当前时间对象
                if (now - mypet.lastEatTime < 5 * 1000) {//判断宠物喂食时间是否小于一分钟
                    console.log('您喂食太快了')//输出结果
                } else {//如果宠物喂食时间小于一分钟喂食成功，宠物状态加10，刷新当前时间
                    mypet.state += 10
                    mypet.lastEatTime = now
                    mypet.introduceSelf()//调用introduceSelf()界面
                }
                this.showPlayWithPetPage(mypet)//将当前宠物对象赋值给showPlayWithPetPage（）方法
            },
            takeCarePet(mypet) {//逗宠物方法
                mypet.state += 20 //宠物状态加10
                mypet.introduceSelf()//调用宠物自我介绍方法做自我介绍
                this.showPlayWithPetPage(mypet)//将当前宠物对象赋值给showPlayWithPetPage（）方法
            },
            showPlayWithPetPage(mypet) {//定义和宠物玩方法
                var result = prompt("1.给宠物喂食   2.逗宠物开心   3.回到主菜单")//给一个输入弹框来选择要给宠物做的事
                switch (result) {//选择循环
                    case "1"://如果选择1，调用feedPet()方法
                        this.feedPet(mypet)//将宠物参数给喂食方法
                        break;//跳出这一条循环
                    case "2"://如果选择1，调用takeCarePet()方法
                        this.takeCarePet(mypet)//将宠物参数给逗宠物开心方法
                        break;//跳出这一条循环
                    case "3"://如果选择3，调用showMainPage()方法
                        this.showMainPage()//调用宠物主界面
                        break;//跳出这一条循环
                    default://如果都不满足
                        console.log("输入有误，请重新输入")//输出结果
                        arguments.callee.call(this, mypet)//调用递归方法，循环自己（  showPlayWithPetPage(mypet)）
                        break;//跳出这一条循环
                }
            },
            showMainPage() {//定义和宠物主界面方法
                var result = prompt("1.领养宠物  2.我的宠物   3.退出")//给一个输入弹框来选择要给宠物做的事
                switch (result) {//选择循环
                    case "1"://如果选择1，调用showBuyPetPage()方法
                        this.showBuyPetPage()//调用领养宠物界面
                        break;//跳出这一条循环
                    case "2"://如果选择2，调用showMyPetPage()方法
                        this.showMyPetPage()//调用展示我的宠物界面
                        break;//跳出这一条循环
                    case "3"://如果选择3，调用close()方法
                        this.close()//关闭窗口
                        break;//跳出循环
                    default://如果都不满足
                        console.log("输入有误，请重新输入")//输出结果
                        arguments.callee.call(this)//调用递归方法，循环自己（ showMainPage() ）
                        break;//跳出循环
                }

            },
            showRegisterPage() {//定义宠物主界面方法
                console.log("=========进入注册页面=========")
                do {
                    var nickname = prompt("请输入您的昵称")//给一个输入弹框来输入注册昵称
                } while (nickname.trim().length === 0)//当输入的昵称为空值则一直循环

                while (this.hasSensitiveWords(nickname)) {//将当前昵称作为参数给hasSensitiveWords()方法进行判断
                    nickname = prompt("您的昵称有敏感词，请重新输入")
                }

                do {
                    var password = prompt("请输入您的密码")//给一个输入弹框来输入注册密码
                } while (password.trim().length < 6)//如果密码的长度值小于6则一直循环

                do {
                    var passwordConfirm = prompt("请再次输入密码")//给一个输入弹框来再次确认密码
                } while (password !== passwordConfirm)//判断第一次的密码和第二次的密码是否一致

                if (this.register(nickname, password)) {//将昵称和密码作为参数给注册方法
                    console.log("注册成功")//如果满足注册条件则注册成功
                    this.showWelcomePage()//调用showWelcomePage()方法
                } else {//否则注册失败
                    console.log("注册失败，昵称重复")
                    this.showRegisterPage()//调用showRegisterPage()
                }


                // game.getUserList()
            },
            showLoginPage() {
                console.log("=========进入登录页面=========")
                do {
                    var nickname = prompt("请输入您的昵称")//给一个输入弹框来输入登录昵称
                } while (nickname.trim().length === 0)//当输入的昵称为空值则一直循环

                do {
                    var password = prompt("请输入您的密码")//给一个输入弹框来输入登录密码
                } while (password.trim().length < 6)//如果密码的长度值小于6则一直循环

                if (this.login(nickname, password)) {//将昵称和密码作为参数给登录方法
                    console.log("登录成功")//如果满足登录条件则登录成功
                    this.loginUser = nickname //登录的昵称赋值给登录用户名
                    this.showMainPage()//调用showMainPage()
                } else {//如果不满足则登录失败
                    console.log("登录失败")
                    this.showLoginPage()//调用showLoginPage()方法
                }
            },
            showWelcomePage() {//定义用户主界面方法
                var result = prompt("1.注册  2.登录 3.退出")//给一个输入弹框来让用户选择
                switch (result) {//选择循环
                    case "1"://如果选择1，调用showRegisterPage()方法
                        this.showRegisterPage()//调用用户注册界面
                        break;//跳出这一条循环
                    case "2"://如果选择2，调用showLoginPage()方法
                        this.showLoginPage()////调用用户登录界面
                        break;//跳出这一条循环
                    case "3"://如果选择3，调用close()方法
                        this.close()//关闭窗口
                        break;//跳出循环
                    default://如果都不满足
                        console.log("输入有误，请重新输入")//输出结果"输入有误，请重新输入"
                        arguments.callee.call(this)//调用递归方法，循环自己（ showWelcomePage()  ）
                        break;
                }
            },
            start() {//游戏开始方法
                console.log("游戏开始")//输出结果"游戏开始"
                this.init()//调用游戏初始化方法
                //用户操作
                this.showWelcomePage()//调用欢迎界面方法
            },
            close() {//关闭游戏方法
                if (confirm("确定退出吗")) {//弹出新的弹框让用户确认是否退出
                    console.log("游戏已退出")//点击“确认”，游戏退出
                } else {//否则调用showWelcomePage()方法
                    this.showWelcomePage()
                }
            },
            getUserList() {//获取注册完成的用户列表
                for (let i = 0; i < this.userList.length; i++) {//循环用户列表
                    console.log(this.userList[i])//输出用户
                }
            }
        }

        game.start()//游戏启动



吧





    </script>
</body>

</html>